package com.yotouch.app.stake.model;

import com.yotouch.core.model.EntityModel;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class Station extends EntityModel {

    /**
     * 拥有的桩类型，e充电用于过滤交直流桩对应的站使用  1直流 2交流 3交&直流
     */
    Integer type;

    /**
     * 充电站名称
     */
    String name;

    /**
     * 运维机构
     */
    Organization org;

    /**
     * 运营商
     */
    Operator operator;

    /**
     * 省编码
     */
    String provinceCode;

    /**
     * 城市编码
     */
    String cityCode;

    /**
     * 区编码
     */
    String districtCode;

    /**
     * 具体的地址
     */
    String address;

    /**
     * 充电标准
     *
     * 聚合所有桩的，枚举值：01 - 2011 充电标准，04 - 2014 充电标准
     */
    String standard;

    /**
     * 充电费描述，指充电高峰低估价格范围描述 (0.3946~1.0044元/度)
     */
    String chargerFee;
    
    /**
     * 服务费描述 (0.8000元/度)
     */
    String serviceFee;
    

    /**
     * 停车区费描述
     */
    String parkingFee;

    /**
     * 停车区开始时间
     */
    String openAt;

    /**
     * 停车区关闭时间
     */
    String closeAt;

    /**
     * 联系电话
     *     工作人员联系电话
     */
    String phone;

    /**
     * 服务代码 （0-内部使用 1-对外开放）
     */
    int serviceCode;

    /**
     * 作用类型  1：专用、2：公用
     */
    int urposeType;

    /**
     * 物业类型(废弃)
     */
    int propertyType;

    /**
     * 是否支持扫码充电(废弃)
     */
    int supportCharge;

    /**
     * 服务描述(废弃)
     */
    String serviceDesc;

    /**
     * 站点通知。目前这个字段界面上没有使用(废弃)
     */
    String stationNotice;


    /**
     * >- 电流类型，二进制，右边第一位为直流（0001,快充）、第二位为交流（0010慢充）、第三位为三相（预留，如0110）、第四位为单相（预留，如1010）、第五位为工业插座（10000）
     * (废弃)
     */
    int currentType;

    /**
     * 经度
     */
    double lng;

    /**
     * 维度
     */
    double lat;

    /**
     * 海拔高度
     */
    double altitude;

    /**
     * 非数据库字段，国网站类型为1时为高速，其他为城市
     * 1 - 高速桩，其他为城市桩
     */
    int inCity;

    /**
     * 1 联网；0 未联网
     * (废弃)
     */
    int link;

    /**
     * 充点电icon, override, 这个字段存在的话，使用这个图像作为站点图标显示 (目前未使用)
     */
    String mapIcon;

    /**
     * 最小输出功率(废弃)
     */
    double lowerPower;

    /**
     * 最大输出功率(废弃)
     */
    double upperPower;

    /**
     * 该充电点24小时内是否已签到：0未签到，1已签到(废弃)
     */
    int isCheckIn;

    /**
     * 是否第三方站
     */
    int isThird;

    /**
     * 状态，
     *     2,3,8,10,11
     */
    int stationStatus;

    /**
     * 充电枪类型对应的数量. 理论上(slow+fast+super=AC+DC=stakeQuantity)
     */
    int chargerTypeNumber;

    /**
     * 慢充数量（功率小于10kw）
     * (废弃)
     */
    int slowCount;

    /**
     * 快充数量（功率大于10kw，小于50kw）
     * (废弃)
     */
    int fastCount;

    /**
     * 超充数量（功率大于50kw）
     * (废弃)
     */
    int superFastCount;

    /**
     * 直流充数量
     */
    int dcCount;

    /**
     * 交流充数量
     */
    int acCount;

    /**
     * 建设场所
     *     1 - 居民区
     *     2 - 公共机构
     *     3 - 企事业单位
     *     4 - 写字楼
     *     5 - 工业园区
     *     6 - 交通枢纽
     *     7 - 大型文体设施
     *     8 - 城市绿地
     *     9 - 大型建筑配建停车场
     *     10 - 路边停车位
     *     11 - 城际高速服务区
     *     255 - 其他
     */
    int construction ;

    /**
     * 省份名称
     *
     */
    String province ;

    /**
     * 城市名称
     *
     */
    String city;
    /**
     * 地区名称
     *
     */
    String districtName ;

    /**
     * 高速路编码
     *
     */
    String gsCode ;

    /**
     * 高速路名称
     *
     */
    String gsName ;


    /**
     * 站编码
     *     国网内部使用的站编码
     */
    String stationNo ;

    /**
     * 互联互通站编码
     *     国网内部站需要生成此编码
     *     互联互通的站需要接收互联互通生成的站编码
     */
    String outStationNo ;

    /**
     * 国家代码
     *     eg ：CN
     *
     */
    String countryCode = "CN";

    /**
     * 服务电话
     *     eg ：400 电话等
     */
    String servicePhone ;

    /**
     * 站点类型，根据isthird标记区分，
     * 互联互通取值(1公共,50个人,100公交专用,101环卫专用,102物流专用,103出租车专用,255其他,99岸电)；
     * 国网取值(1高速,2城市公共,3单位内部,4公交,5其他,6出租车，99岸电)
     */
    int stationType ;

    /**
     * 站点引导
     *     文字描述，用于引导车主找到充车位
     *
     */
    String siteGuide ;

    /**
     * 适用车型
     *     描述该站点适用的车型大小以及类型，如 大巴，物流车，私家车等
     */
    String matchCars ;

    /**
     * 是否需要预约才可以使用(未使用)
     *     0 - 不支持预约
     *     1 - 支持预约
     */
    int supportOrder = 0 ;

    /**
     * 交易方式
     *
     * 逗号分隔，1 - 充电卡；2 - 二维码； 4 - 账户余额； 6 - 其他
     */
    String tradeTypes ;

    /**
     * 支付描述 (如:二维码,国网充电卡,账户余额)
     */
    String payTypeDesc;

    /**
     *  收费合理性
     *      目前此字段数据来源和计算方法未知，默认值为 999999，且数据库不存储此字段，
     *  因为e充电需要，故提供占位字段
     *
     *  0 - 免费；1 - 便宜 ； 2 - 正常 ； 3 - 贵； 999999 - 未知（默认）；
     */
    int priceRational = 999999 ;


    /**
     * 停车区
     */
    List<ParkingArea> parkingAreas = new ArrayList<>() ;

    public List<ParkingArea> getParkingAreas() {
        return parkingAreas;
    }

    public void setParkingAreas(List<ParkingArea> parkingAreas) {
        this.parkingAreas = parkingAreas;
    }

    public int getPriceRational() {
        return priceRational;
    }

    public void setPriceRational(int priceRational) {
        this.priceRational = priceRational;
    }

    public String getTradeTypes() {
        return tradeTypes;
    }

    public void setTradeTypes(String tradeTypes) {
        this.tradeTypes = tradeTypes;
    }

    public int getSupportOrder(){ return this.supportOrder ; }
    public void setSupportOrder(int supportOrder){ this.supportOrder = supportOrder ;}

    public String getMatchCars(){ return this.matchCars ; }
    public void setMatchCars(String matchCars){ this.matchCars = matchCars ;}

    public String getSiteGuide(){ return this.siteGuide ; }
    public void setSiteGuide(String siteGuide){ this.siteGuide = siteGuide ;}

    public int getStationType(){ return this.stationType ; }
    public void setStationType(int stationType){ this.stationType = stationType ;}

    public String getServicePhone(){ return this.servicePhone ; }
    public void setServicePhone(String servicePhone){ this.servicePhone = servicePhone ;}

    public String getCountryCode(){ return this.countryCode ; }
    public void setCountryCode(String countryCode){ this.countryCode = countryCode ;}

    public String getOutStationNo(){ return this.outStationNo ; }
    public void setOutStationNo(String outStationNo){ this.outStationNo = outStationNo ;}

    public String getStationNo(){ return this.stationNo ; }
    public void setStationNo(String stationNo){ this.stationNo = stationNo ;}

    public String getDistrictName(){
        return this.districtName ;
    }

    public void setDistrictName(String districtName){
        this.districtName = districtName ;
    }

    public String getGsCode(){
        return this.gsCode ;
    }

    public void setGsCode(String gsCode){
        this.gsCode = gsCode ;
    }

    public String getGsName(){
        return this.gsName ;
    }

    public void setGsName(String gsName){
        this.gsName = gsName ;
    }

    public String getProvince(){
        return this.province ;
    }

    public void setProvince(String province){
        this.province = province ;
    }

    public String getCity(){
        return this.city ;
    }

    public void setCity(String city){
        this.city = city ;
    }

    public int getConstruction(){
        return this.construction ;
    }

    public void setConstruction(int construction){
        this.construction = construction ;
    }


    /**
     * 站图片
     */
    List<StationImage> stationImageList;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getProvinceCode() {
        return provinceCode;
    }

    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }

    public String getCityCode() {
        return cityCode;
    }

    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }

    public String getDistrictCode() {
        return districtCode;
    }

    public void setDistrictCode(String districtCode) {
        this.districtCode = districtCode;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getStandard() {
        return standard;
    }

    public void setStandard(String standard) {
        this.standard = standard;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public int getServiceCode() {
        return serviceCode;
    }

    public void setServiceCode(int serviceCode) {
        this.serviceCode = serviceCode;
    }

    public int getUrposeType(){
        return urposeType;
    }

    public void setUrposeType(int urposeType){
        this.urposeType = urposeType;
    }

    public String getPayTypeDesc() {
        String payTypeDesc = "";
        if(StringUtils.isEmpty(tradeTypes)){
            return payTypeDesc;
        }
        String[] types = this.tradeTypes.split(",");
        for (String type: types) {
            if("1".equals(type)) {
                payTypeDesc += "充电卡,";
            } else if("2".equals(type)){
                payTypeDesc += "二维码,";
            } else if("4".equals(type)){
                payTypeDesc += "账户余额,";
            } else {
                payTypeDesc += "其他,";
            }
        }
        return payTypeDesc;
    }

    public double getLng() {
        return lng;
    }

    public void setLng(double lng) {
        this.lng = lng;
    }

    public double getLat() {
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    public int getInCity() {
        if((isThird == 0 || isThird == 1) && stationType == 1){
            return 1;
        }
        return 0;
    }

    public String getMapIcon() {
        return mapIcon;
    }

    public void setMapIcon(String mapIcon) {
        this.mapIcon = mapIcon;
    }

    public Operator getOperator() {
        return operator;
    }

    public void setOperator(Operator operator) {
        this.operator = operator;
    }

    public int getStationStatus() {
        return stationStatus;
    }

    public void setStationStatus(int stationStatus) {
        this.stationStatus = stationStatus;
    }

    public int getChargerTypeNumber() {
        return this.dcCount+this.acCount;
    }


    public List<StationImage> getStationImageList() {
        return stationImageList;
    }

    public void setStationImageList(List<StationImage> stationImageList) {
        this.stationImageList = stationImageList;
    }

    public int getDcCount() {
        return dcCount;
    }

    public void setDcCount(int dcCount) {
        this.dcCount = dcCount;
    }

    public int getAcCount() {
        return acCount;
    }

    public void setAcCount(int acCount) {
        this.acCount = acCount;
    }

    public int getIsThird() {
        return isThird;
    }

    public void setIsThird(int isThird) {
        this.isThird = isThird;
    }

    public double getAltitude() {
        return altitude;
    }

    public void setAltitude(double altitude) {
        this.altitude = altitude;
    }

    public Organization getOrg() {
        return org;
    }

    public void setOrg(Organization org) {
        this.org = org;
    }

    public String getParkingFee() {
        return parkingFee;
    }

    public void setParkingFee(String parkingFee) {
        this.parkingFee = parkingFee;
    }

    public String getOpenAt() {
        return openAt;
    }

    public void setOpenAt(String openAt) {
        this.openAt = openAt;
    }

    public String getCloseAt() {
        return closeAt;
    }

    public void setCloseAt(String closeAt) {
        this.closeAt = closeAt;
    }

    public String getServiceDesc() {
        return serviceDesc;
    }

    public void setServiceDesc(String serviceDesc) {
        this.serviceDesc = serviceDesc;
    }

    public String getStationNotice() {
        return stationNotice;
    }

    public void setStationNotice(String stationNotice) {
        this.stationNotice = stationNotice;
    }

    public int getCurrentType() {
        return currentType;
    }

    public void setCurrentType(int currentType) {
        this.currentType = currentType;
    }

    public int getLink() {
        return link;
    }

    public void setLink(int link) {
        this.link = link;
    }

    public double getLowerPower() {
        return lowerPower;
    }

    public void setLowerPower(double lowerPower) {
        this.lowerPower = lowerPower;
    }

    public double getUpperPower() {
        return upperPower;
    }

    public void setUpperPower(double upperPower) {
        this.upperPower = upperPower;
    }

    public int getIsCheckIn() {
        return isCheckIn;
    }

    public void setIsCheckIn(int isCheckIn) {
        this.isCheckIn = isCheckIn;
    }

    public int getSlowCount() {
        return slowCount;
    }

    public void setSlowCount(int slowCount) {
        this.slowCount = slowCount;
    }

    public int getFastCount() {
        return fastCount;
    }

    public void setFastCount(int fastCount) {
        this.fastCount = fastCount;
    }

    public int getSuperFastCount() {
        return superFastCount;
    }

    public void setSuperFastCount(int superFastCount) {
        this.superFastCount = superFastCount;
    }

    public String getChargerFee() {
        return chargerFee;
    }

    public void setChargerFee(String chargerFee) {
        this.chargerFee = chargerFee;
    }

    public String getServiceFee() {
        return serviceFee;
    }

    public void setServiceFee(String serviceFee) {
        this.serviceFee = serviceFee;
    }

    public int getPropertyType() {
        return propertyType;
    }

    public void setPropertyType(int propertyType) {
        this.propertyType = propertyType;
    }

    public int getSupportCharge() {
        return supportCharge;
    }

    public void setSupportCharge(int supportCharge) {
        this.supportCharge = supportCharge;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }
}
